﻿/**
	@file	StateMachine.cpp
	@date	2013/1/25
	@author	김진식(jeensig@gmail.com)
	@brief	FSM 구현부
*/

#include "StateMachine.h"
#include "Start_Game.h"
#include "Play_Game.h"
#include "End_Game.h"

StateMachine::StateMachine(TetrisGame* owner) :
				owner_(owner)
{
	SetState(); ///< 상태들을 만든다.
}

StateMachine::~StateMachine()
{

}

/**
	@brief		상태들
	@remarks	사용할 상태들을 저장한다.
*/
void StateMachine::SetState()
{
	state_.push_back(new StartGame());
	state_.push_back(new PlayingGame());
	state_.push_back(new EndGame());
}

/**
	@brief		상태를 세팅
	@remarks	current state를 세팅한다.
*/
void StateMachine::SetCurrentState(STATE_NUMBER number)
{
	current_state_ = state_[number];
}

/**
	@brief		상태의 update
	@remarks	현재 상태의 update
*/
void StateMachine::Update()
{
	if(current_state_)
	{
		current_state_->Update(owner_);
	}
}

/**
	@brief		상태의 render
	@remarks	현재 상태의 render
*/
void StateMachine::Render()
{
	if(current_state_)
	{
		current_state_->Render();
	}
}

/**
	@brief		상태 전이
	@remarks	상태를 바꾼다.
*/
void StateMachine::ChangeState(STATE_NUMBER number)
{
	current_state_ = state_[number];

	current_state_->Init();
}